home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1985-08-13 | 6.4 KB | 189 lines
10 CO=&H1C00:DEF SEG=&HFFFF:IF PEEK(14)=253 THEN CO=&H1700:I=1 20 DA=CO+49:DEF SEG=CO:BLOAD"chess.bld",0:IF I THEN POKE 3,23:POKE 16,23 30 DEF SEG=DA:GOSUB 690 40 M=40:N=158:K=21 50 POKE 43,1-BB:GOTO 180 60 IF C2 THEN 180 70 POKE 223,0:DEF SEG=CO:SOUND 99,0:CALL ML:DEF SEG=DA 80 IF PEEK(95)<229 AND PEEK(95)>150 THEN I=0:GOTO 120 90 K1=PEEK(92):K=PEEK(93):SOUND 500,1:GOSUB 1190:GOSUB 950 100 IF PEEK(95)>99 OR PEEK(95)<28 THEN 180 110 I=1 120 X=I+BB+PEEK(43):IF I=0 THEN POKE 43,-(PEEK(43)=0) 130 GOSUB 1410:PRINT"Checkmate! "; 140 IF X/2-INT(X/2) THEN PRINT"White wins.":GOTO 160 150 PRINT"Black wins." 160 SOUND 999,9:FOR J=0 TO 200:NEXT 170 SOUND 260,9:FOR J=0 TO 200:NEXT 180 F=0:M=M-8:N=N-3 190 GOSUB 680 200 C$=INKEY$:IF C$="" THEN 200 210 IF LEN(C$)=1 THEN 270 220 C=ASC(RIGHT$(C$,1)):IF C=75 AND M>32 THEN GOSUB 680:M=M-31:K=K-1:GOTO 190 230 IF C=77 AND M<249 THEN GOSUB 680:M=M+31:K=K+1:GOTO 190 240 IF C=72 AND N>8 THEN GOSUB 680:N=N-21:K=K+10:GOTO 190 250 IF C=80 AND N<155 THEN GOSUB 680:N=N+21:K=K-10:GOTO 190 260 GOTO 200 270 C=ASC(C$):GOSUB 1400:IF C<>13 OR F=0 THEN 360 280 POKE 92,K1:POKE 93,K:J=PEEK(41):POKE 41,1:POKE 223,1 290 DEF SEG=CO:CALL ML:DEF SEG=DA 300 POKE 41,J:IF PEEK(224)=0 THEN 320 310 GOSUB 1190:GOSUB 950:GOTO 60 320 X=PEEK(103+K1):IF (X=6 OR X=250) AND ABS(K-K1)=2 THEN GOSUB 1190:GOSUB 950:Y=K1:K1=21-70*(X>6)-7*(K>K1):K=K+(K>Y)-(Y>K):MM=MM-1:GOSUB 1190:PR(MV)=1:GOSUB 950:GOTO 60 330 IF PEEK(103+K) THEN 350 340 IF (X=1 OR X=255) AND (ABS(K-K1)=9 OR ABS(K-K1)=11) THEN GOSUB 1190:GOSUB 950:K=K+10*(X=1)-10*(X>1):MM=MM-1:GOSUB 1190:PR(MV)=1:GOSUB 950:GOTO 60 350 SOUND 100,4:F=0:POKE 43,-(PEEK(43)=0):GOTO 200 360 IF F THEN 200 370 IF C<>13 OR PEEK(103+K)=0 THEN 410 380 IF PEEK(43) AND PEEK(103+K)<7 THEN 400 390 IF PEEK(43) OR PEEK(103+K)<7 THEN 410 400 K1=K:F=1:SOUND 500,1:GOTO 200 410 S=0 420 IF D(S)=C THEN 450 430 S=S+1:IF S<28 THEN 420 440 GOTO 200 450 IF S>22 THEN SOUND 500,1:LOCATE 1,22:PRINT C$:POKE 41,VAL(C$):GOTO 200 460 IF S=13 THEN SOUND 500,1:GOSUB 680:M=M+8:N=N+3:GOTO 70 470 IF S=14 THEN SOUND 500,1:FOR I=0 TO 70 STEP 10:FOR J=0 TO 7:POKE 124+I+J,0:NEXT:NEXT:MX=0:MV=0:MM=0:BB=0:GOSUB 900:GOTO 40 480 IF S<>15 OR MV=0 THEN 530 490 SOUND 500,1:POKE 43,-(PEEK(43)=0):GOSUB 680:GOSUB 1200:MM=MM-1:GOSUB 1430 500 IF ABS(PC(MV)-128)=122 AND ABS(FR(MV)-T(MV))=2 THEN GOSUB 1200 510 IF ABS(PC(MV)-128)=127 AND PC(MV+1)=0 AND MV<MX THEN GOSUB 1200 520 GOTO 180 530 IF S<>16 OR MV>=MX THEN 580 540 SOUND 500,1:POKE 43,-(PEEK(43)=0):GOSUB 680:GOSUB 1210:MM=MM+1:GOSUB 1430 550 IF ABS(PC(MV)-128)=122 AND ABS(FR(MV)-T(MV))=2 THEN GOSUB 1210 560 IF ABS(PC(MV)-128)=127 AND PC(MV+1)=0 AND MV<MX THEN GOSUB 1210 570 GOTO 180 580 IF S=17 THEN BB=0:GOTO 670 590 IF S=18 THEN 1280 600 IF S=19 THEN 1220 610 IF S=20 THEN 1340 620 IF S=21 THEN BB=1:GOTO 670 630 IF S=22 THEN SOUND 500,1:C2=1-C2 640 IF S>12 THEN 200 650 SOUND 500,1:IF S>6 THEN S=262-S 660 POKE 103+K,S:GOSUB 950:M=M-8:N=N-3:GOTO 190 670 SOUND 500,1:MV=0:MM=0:FOR I=0 TO 77:POKE I+124,BD(I):NEXT:GOSUB 890:GOTO 40 680 PUT (M,N),F,XOR:RETURN 690 KEY OFF:SCREEN 1,0:COLOR 0,1:CLS 700 POKE 41,1 710 DEFINT P,N,B,R,Q,K,F 720 DIM A(64),C(64),D(27),P(30),N(30),B(30),R(30),Q(30),K(30),F(82),FR(200),T(200),PC(200),CA(200),PR(200),BD(77) 730 FOR I=0 TO 27:READ D(I):NEXT 740 LINE (0,0)-(29,19),1,BF 750 GET (0,0)-(29,19),A:CLS 760 LINE (0,0)-(29,19),2,BF 770 GET (0,0)-(29,19),C:CLS 780 LOCATE 10,18:PRINT "CHESS" 790 LOCATE 12,15:PRINT "John Krause" 800 FOR I=103 TO 222:POKE I,7:NEXT 810 FOR I=0 TO 77:READ BD(I):POKE I+124,BD(I):NEXT 820 FOR K=0 TO 30:READ P(K):NEXT 830 FOR K=0 TO 30:READ N(K):NEXT 840 FOR K=0 TO 30:READ B(K):NEXT 850 FOR K=0 TO 30:READ R(K):NEXT 860 FOR K=0 TO 30:READ Q(K):NEXT 870 FOR K=0 TO 30:READ K(K):NEXT 880 FOR K=0 TO 82:READ F(K):NEXT:CLS 890 IF BB THEN POKE 127,6:POKE 128,5:POKE 197,250:POKE 198,251 900 LOCATE 1,5:PRINT"Move# Level"PEEK(41)" To move:":GOSUB 1430 910 FOR I=0 TO 7:FOR J=0 TO 7 920 H=70-10*I+J:GOSUB 960:NEXT:NEXT 930 FOR I=1 TO 8:LOCATE 3*I-1+(I>4),2:PRINT 9-I:NEXT 940 GOSUB 1400:RETURN 950 H=K-21:I=INT(H/10):J=H-10*I:I=7-I 960 M=31*J+40:N=21*I+11 970 IF INT((I+J)/2)-(I+J)/2 THEN PUT (M-8,N-3),C,PSET:GOTO 990 980 PUT (M-8,N-3),A,PSET 990 L=PEEK(124+H):IF I=0 AND L=1 THEN L=5:POKE 124+H,L 1000 IF I=7 AND L=255 THEN L=251:POKE 124+H,L 1010 IF L>6 THEN L=L-256 1020 ON ABS(L) GOTO 1040,1050,1060,1070,1080,1090 1030 GOTO 1100 1040 PUT (M,N),P,OR:GOTO 1100 1050 PUT (M,N),N,OR:GOTO 1100 1060 PUT (M,N),B,OR:GOTO 1100 1070 PUT (M,N),R,OR:GOTO 1100 1080 PUT (M,N),Q,OR:GOTO 1100 1090 PUT (M,N),K,OR 1100 IF BB THEN L=-L 1110 IF L>=0 THEN RETURN 1120 ON -L GOTO 1130,1140,1150,1160,1170,1180 1130 PUT (M,N),P,XOR:RETURN 1140 PUT (M,N),N,XOR:RETURN 1150 PUT (M,N),B,XOR:RETURN 1160 PUT (M,N),R,XOR:RETURN 1170 PUT (M,N),Q,XOR:RETURN 1180 PUT (M,N),K,XOR:RETURN 1190 K2=K:K=K1:MV=MV+1:PR(MV)=0:MM=MM+1:MX=MV:FR(MV)=K:PC(MV)=PEEK(103+K):POKE 103+K,0:GOSUB 950:K=K2:T(MV)=K:CA(MV)=PEEK(103+K):POKE 103+K,PC(MV):GOSUB 1430:RETURN 1200 POKE 103+FR(MV),PC(MV):POKE 103+T(MV),CA(MV):K=T(MV):GOSUB 950:K=FR(MV):GOSUB 950:MV=MV-1:RETURN 1210 MV=MV+1:POKE 103+T(MV),PEEK(103+FR(MV)):POKE 103+FR(MV),0:K=FR(MV):GOSUB 950:K=T(MV):GOSUB 950:RETURN 1220 SOUND 500,1:GOSUB 1410:INPUT"Save: ",N$ 1230 ON ERROR GOTO 1420 1240 OPEN N$+".chs" FOR OUTPUT AS #1 1250 FOR I=124 TO 201:PRINT #1,PEEK(I):NEXT 1260 PRINT #1,PEEK(41),PEEK(43),MV,MX,MM,BB,M,N,K,C2 1270 FOR I=1 TO MX:PRINT #1,T(I),FR(I),PC(I),CA(I),PR(I):NEXT:CLOSE #1:ON ERROR GOTO 0:GOSUB 1400:GOTO 200 1280 SOUND 500,1:GOSUB 1410:INPUT"Load: ",N$ 1290 ON ERROR GOTO 1420 1300 OPEN N$+".chs" FOR INPUT AS #1 1310 FOR I=124 TO 201:INPUT #1,J:POKE I,J:NEXT 1320 INPUT #1,X,J,MV,MX,MM,BB,M1,N1,K1,C2:POKE 41,X:POKE 43,J 1330 FOR I=1 TO MX:INPUT #1,T(I),FR(I),PC(I),CA(I),PR(I):NEXT:CLOSE #1:ON ERROR GOTO 0:GOSUB 900:M=M1:N=N1:K=K1:GOTO 190 1340 SOUND 500,1:X=0:FOR I=1 TO MX:IF PR(I) THEN 1370 1350 X=X+1:IF X/2-INT(X/2) THEN LPRINT(X+1)/2" ";:GOSUB 1380:GOTO 1370 1360 LPRINT" ";:GOSUB 1380:LPRINT 1370 NEXT:LPRINT:GOTO 200 1380 J=INT(FR(I)/10):LPRINT CHR$(64+FR(I)-10*J);MID$(STR$(J-1),2,1)"-"; 1390 J=INT(T(I)/10):LPRINT CHR$(64+T(I)-10*J);MID$(STR$(J-1),2,1);:RETURN 1400 LOCATE 23,6:PRINT "A B C D E F G H":RETURN 1410 LOCATE 23,6:PRINT" ":LOCATE 23,9:RETURN 1420 GOSUB 1410:PRINT"Error #"ERR:RESUME 200 1430 LOCATE 1,10:PRINT INT(MM/2+1)" ":LOCATE 1,35:IF INT(MM/2)=MM/2 THEN PRINT CHR$(87):RETURN 1440 PRINT CHR$(66):RETURN 1450 DATA 32,80,78,66,82,81,75,16,14,2,18,17,11,109,99,98,102,110,108,115,112,105,116,49,50,51,52,53 1460 DATA 4,2,3,5,6,3,2,4,7 1470 DATA 7,1,1,1,1,1,1,1,1,7 1480 DATA 7,0,0,0,0,0,0,0,0,7 1490 DATA 7,0,0,0,0,0,0,0,0,7 1500 DATA 7,0,0,0,0,0,0,0,0,7 1510 DATA 7,0,0,0,0,0,0,0,0,7 1520 DATA 7,255,255,255,255,255,255,255,255,7 1530 DATA 7,252,254,253,251,250,253,254,252 1540 DATA 28,14,0,0,0,0,3840,0 1550 DATA 16128,192,16128,192,3840,0,16128,192 1560 DATA 3840,0,3840,0,16128,192,-256,240 1570 DATA -256,240,0,0,0,0,128 1580 DATA 28,14,3,0,-16381,0,-1021,0 1590 DATA -241,192,-244,240,-241,240,-241,252 1600 DATA -193,252,-12481,255,3852,255,16128,255 1610 DATA -256,255,-253,255,-253,255,-253 1620 DATA 28,14,-4096,240,-4096,240,-1021,252 1630 DATA -253,60,-253,204,-253,204,-253,204 1640 DATA -256,240,-16384,48,-256,240,-16384,48 1650 DATA -193,-16129,-3841,-3841,192,12288,-253 1660 DATA 28,14,16143,207,16143,207,-241,255 1670 DATA 3,12,-253,252,-253,252,-253,252 1680 DATA -253,252,-253,252,-253,252,3,12 1690 DATA -241,255,-193,-16129,-193,-16129,-193 1700 DATA 28,14,-16384,192,-16384,192,-16384,192 1710 DATA -16192,-16192,-3133,-16144,-3277,243,-3277,243 1720 DATA -193,255,12,12,-241,252,-3313,252 1730 DATA -241,252,12,12,-241,252,0 1740 DATA 28,14,-256,192,-13312,192,-3268,207 1750 DATA -13057,-16129,-1,-16129,-16129,-16129,-3265,255 1760 DATA -193,255,12,12,-241,252,-3313,252 1770 DATA -241,252,12,12,-241,252,0 1780 DATA 60,20,-1,-1,-1,-3841,-1,-1 1790 DATA -1,-3841,252,0,0,-4093,252,0 1800 DATA 0,-4093,252,0,0,-4093,252,0 1810 DATA 0,-4093,252,0,0,-4093,252,0 1820 DATA 0,-4093,252,0,0,-4093,252,0 1830 DATA 0,-4093,252,0,0,-4093,252,0 1840 DATA 0,-4093,252,0,0,-4093,252,0 1850 DATA 0,-4093,252,0,0,-4093,252,0 1860 DATA 0,-4093,252,0,0,-4093,252,0 1870 DATA 0,-4093,-1,-1,-1,-3841,-1,-1 1880 DATA -1,-3841,0